package com.arpa.wms.service;

import com.arpa.wms.domain.dto.BrandDTO;
import com.arpa.wms.domain.entity.Brand;
import com.arpa.wms.domain.vo.BrandVO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qimen.api.request.ItemsSynchronizeRequest;
import com.qimen.api.request.SingleitemSynchronizeRequest;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 品牌 服务类
 * </p>
 *
 * @author LEO
 * @since 2020-08-03
 */
public interface IBrandService extends IService<Brand> {

    boolean checkNameOrCode(Brand entity);

    /**
     * 保存
     *
     * @param entity
     * @return
     */
    @Override
    boolean save(Brand entity);

    /**
     * 根据code更新实体
     *
     * @param entity
     * @return
     */
    int updateByCode(Brand entity);

    /**
     * 查询列表
     *
     * @param brandDTO
     * @return
     */
    List<BrandVO> queryList(BrandDTO brandDTO);

    /**
     * 根据code批量查询
     *
     * @param codes
     * @return
     */
    List<BrandVO> getListByCodes(List<String> codes);

    /**
     * 获取品牌信息
     * @param code 品牌code
     * @return
     */
    Map<String,Object> getByCode(String code,String groupCode);

    /**
     * 查询合计,包含总数
     *
     * @param brandDTO
     * @return
     */
    BrandVO queryListSum(BrandDTO brandDTO);

    /**
     * @author: Allen chen
     * @Date: 2020/8/11 10:38
     * @Description: 批量逻辑删除
     */
    int batchDelete(List<String> codes);

    /**
     * @author: Allen chen
     * @Date: 2020/8/25 15:13
     * @Description: 批量状态更新
     */
    Map<String,Object> batchUpdateStatus(List<String> codes, String status);

    /**
     * 获取货主商品品牌列表
     *
     * @param shipmentCode
     * @return
     */
    List<Map<String, Object>> findByShipmentCode(String shipmentCode);


    /**
     * 通过code删除
     *
     * @param codes
     */
    Map<String,Object> removeByCode(List<String> codes);

    /**
     * 同步商品时，根据操作类型判断是插入还是更新
     *
     * @param request
     * @param shipmentName
     */
    void batchGoodsBrandSave(ItemsSynchronizeRequest request, String shipmentName);

    /**
     * 同步单个商品时，根据操作类型判断是插入还是更新
     *
     * @param request
     * @param shipmentName
     */
    void singleGoodsBrandSave(SingleitemSynchronizeRequest request, String shipmentName);
}
